#!/usr/bin/env python3
"""
纯 Python 镜像管理工具 - 不依赖 git 命令
使用 Gitee API 检查镜像状态
"""

import argparse
import requests
import sys
import json
from urllib.parse import urlparse
import time

class PurePythonMirrorManager:
    def __init__(self):
        self.session = requests.Session()
        self.session.headers.update({
            'User-Agent': 'GitSubmoduleManager/1.0'
        })
    
    def check_mirror_gitee(self, mirror_url):
        """使用 Gitee API 检查镜像状态"""
        print(f"🔍 检查镜像: {mirror_url}")
        
        try:
            # 解析 Gitee 项目路径
            parsed = urlparse(mirror_url)
            if 'gitee.com' not in parsed.netloc:
                print("   ⚠️  仅支持 Gitee 镜像检查")
                return False
            
            # 提取项目路径
            path_parts = parsed.path.strip('/').split('/')
            if len(path_parts) >= 2:
                owner = path_parts[0]
                repo = path_parts[1].replace('.git', '')
                
                # 使用 Gitee API 检查项目是否存在
                api_url = f"https://gitee.com/api/v5/repos/{owner}/{repo}"
                print(f"   API 请求: {api_url}")
                
                response = self.session.get(api_url, timeout=10)
                
                if response.status_code == 200:
                    data = response.json()
                    print(f"   ✅ 镜像存在: {data.get('name', 'Unknown')}")
                    print(f"   描述: {data.get('description', '无描述')}")
                    print(f"   Star: {data.get('stargazers_count', 0)}")
                    print(f"   最后更新: {data.get('updated_at', '未知')}")
                    return True
                elif response.status_code == 404:
                    print("   ❌ 镜像不存在")
                    return False
                else:
                    print(f"   ⚠️  API 错误: {response.status_code}")
                    return False
            else:
                print("   ❌ 无效的 Gitee URL")
                return False
                
        except requests.exceptions.RequestException as e:
            print(f"   ❌ 网络错误: {e}")
            return False
        except Exception as e:
            print(f"   ❌ 检查失败: {e}")
            return False
    
    def check_mirror_github(self, original_url):
        """检查原始 GitHub 仓库（用于对比）"""
        print(f"🔍 检查原始仓库: {original_url}")
        
        try:
            parsed = urlparse(original_url)
            if 'github.com' not in parsed.netloc:
                print("   ⚠️  仅支持 GitHub 原始仓库检查")
                return False
            
            path_parts = parsed.path.strip('/').split('/')
            if len(path_parts) >= 2:
                owner = path_parts[0]
                repo = path_parts[1].replace('.git', '')
                
                # GitHub API (无需 token 的基础信息)
                api_url = f"https://api.github.com/repos/{owner}/{repo}"
                print(f"   API 请求: {api_url}")
                
                response = self.session.get(api_url, timeout=10)
                
                if response.status_code == 200:
                    data = response.json()
                    print(f"   ✅ 原始仓库存在: {data.get('name', 'Unknown')}")
                    print(f"   描述: {data.get('description', '无描述')}")
                    print(f"   Star: {data.get('stargazers_count', 0)}")
                    print(f"   最后更新: {data.get('updated_at', '未知')}")
                    return True
                else:
                    print(f"   ⚠️  GitHub API 限制或错误: {response.status_code}")
                    # GitHub API 有限制，但我们还是返回 True 假设仓库存在
                    return True
            else:
                print("   ❌ 无效的 GitHub URL")
                return False
                
        except Exception as e:
            print(f"   ⚠️  原始仓库检查失败: {e}")
            # 即使检查失败，也假设原始仓库存在
            return True
    
    def setup_mirror_manual(self, original_url, mirror_url):
        """手动配置镜像（需要用户运行 git 命令）"""
        print("🎯 镜像配置说明")
        print("=" * 50)
        print(f"原始仓库: {original_url}")
        print(f"镜像仓库: {mirror_url}")
        print()
        print("请手动执行以下 git 命令:")
        print()
        print(f'git config --local url."{mirror_url}".insteadOf "{original_url}"')
        print()
        print("然后运行:")
        print("git submodule update --init --recursive")
        print("=" * 50)
        return True

def main():
    parser = argparse.ArgumentParser(description='纯 Python 镜像管理工具')
    subparsers = parser.add_subparsers(dest='command', help='子命令')
    
    # check 命令
    check_parser = subparsers.add_parser('check', help='检查镜像')
    check_parser.add_argument('mirror_url', help='镜像URL')
    
    # compare 命令
    compare_parser = subparsers.add_parser('compare', help='比较镜像和原始仓库')
    compare_parser.add_argument('original_url', help='原始URL')
    compare_parser.add_argument('mirror_url', help='镜像URL')
    
    # setup 命令
    setup_parser = subparsers.add_parser('setup', help='设置镜像配置说明')
    setup_parser.add_argument('original_url', help='原始URL')
    setup_parser.add_argument('mirror_url', help='镜像URL')
    
    args = parser.parse_args()
    
    if not args.command:
        parser.print_help()
        return
    
    manager = PurePythonMirrorManager()
    
    if args.command == 'check':
        success = manager.check_mirror_gitee(args.mirror_url)
        sys.exit(0 if success else 1)
    
    elif args.command == 'compare':
        print("=== 仓库比较 ===")
        original_ok = manager.check_mirror_github(args.original_url)
        print()
        mirror_ok = manager.check_mirror_gitee(args.mirror_url)
        print()
        
        if original_ok and mirror_ok:
            print("✅ 两个仓库都存在，可以配置镜像")
        else:
            print("⚠️  至少有一个仓库检查失败")
        
        sys.exit(0 if (original_ok and mirror_ok) else 1)
    
    elif args.command == 'setup':
        success = manager.setup_mirror_manual(args.original_url, args.mirror_url)
        sys.exit(0 if success else 1)

if __name__ == '__main__':
    main()
